package com.sxit.tdf.server.util;

// import cn.hutool.json.JSONObject;
// import com.alibaba.fastjson.JSON;
// import com.google.gson.JsonObject;
// import com.google.gson.JsonParser;
// import com.sxit.app.entity.bo.FaceInfo;
// import com.sxit.app.entity.bo.FacialIdentificationResult;
// import com.sxit.app.exception.EmosException;
// import lombok.extern.slf4j.Slf4j;
//
// import java.io.BufferedReader;
// import java.io.IOException;
// import java.io.InputStreamReader;
// import java.net.HttpURLConnection;
// import java.net.URL;
// import java.util.ArrayList;
// import java.util.HashMap;
// import java.util.List;
// import java.util.Map;

/**
 * @author 橙子高
 * @date 2022/1/9 20:28
 * @describe
 */
// @Slf4j
public class FaceUtil {
  //  // 官网获取的 API Key 更新为你注册的
  //  private static final String clientId = "7dfOjk1gtWfpDSk69MTWtg4m";
  //  // 官网获取的 Secret Key 更新为你注册的
  //  private static final String clientSecret = "9FIStXhEolq83c8N7DjvFSMDSe0o9cyj";
  //  // accessToken
  //  private static final String accessToken =
  //      "[24.739872f94bbeed30bfb250fb64c3cb58.2592000.1644324384.282335-25488002]";
  //  // 分组信息
  //  private static final String group_id = "emostest1";
  //
  //  /**
  //   * 获取对应权限
  //   *
  //   * @return
  //   */
  //  public static String getAuth() {
  //    return getAuth(clientId, clientSecret);
  //  }
  //
  //  /**
  //   * 获取API访问token 该token有一定的有效期，需要自行管理，当失效时需重新获取.
  //   *
  //   * @param ak - 百度云官网获取的 API Key
  //   * @param sk - 百度云官网获取的 Secret Key
  //   * @return assess_token 示例：
  //   *     "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
  //   */
  //  private static String getAuth(String ak, String sk) {
  //    // 获取token地址
  //    String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
  //    String getAccessTokenUrl =
  //        authHost
  //            // 1. grant_type为固定参数
  //            + "grant_type=client_credentials"
  //            // 2. 官网获取的 API Key
  //            + "&client_id="
  //            + ak
  //            // 3. 官网获取的 Secret Key
  //            + "&client_secret="
  //            + sk;
  //    try {
  //      URL realUrl = new URL(getAccessTokenUrl);
  //      // 打开和URL之间的连接
  //      HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
  //      connection.setRequestMethod("GET");
  //      connection.connect();
  //      // 获取所有响应头字段
  //      Map<String, List<String>> map = connection.getHeaderFields();
  //      // 遍历所有的响应头字段
  //      for (String key : map.keySet()) {
  //        System.err.println(key + "--->" + map.get(key));
  //      }
  //      // 定义 BufferedReader输入流来读取URL的响应
  //      BufferedReader in = new BufferedReader(new
  // InputStreamReader(connection.getInputStream()));
  //      String result = "";
  //      String line;
  //      while ((line = in.readLine()) != null) {
  //        result += line;
  //      }
  //      /** 返回结果示例 */
  //      System.err.println("result:" + result);
  //      JSONObject jsonObject = new JSONObject(result);
  //      String access_token = jsonObject.getStr("access_token");
  //      return access_token;
  //    } catch (Exception e) {
  //      System.err.printf("获取token失败！");
  //      e.printStackTrace(System.err);
  //    }
  //    return null;
  //  }
  //
  //  /**
  //   * 通过读取文件路径，获取图片中的人脸数据
  //   *
  //   * @param filePath 图片的位置
  //   * @return
  //   */
  //  public static String getFaceInfoByFilePath(String filePath) throws IOException {
  //    // 1. 根据文件路径读取byte[] 数组,并将数组进行Base64编码
  //    byte[] bytes = FileUtil.readFileByBytes(filePath);
  //    String encode = Base64Util.encode(bytes);
  //
  //    try {
  //      // 2.讲封装好的参数发送到目标地址,并返回人脸数据用于人脸检测
  //      String url = "https://aip.baidubce.com/rest/2.0/face/v3/detect";
  //      Map<String, Object> map = new HashMap<>();
  //      map.put("image", encode); // 图片的基本信息和方式
  //      map.put("image_type", "BASE64"); // 编码方式
  //      map.put("face_type", "LIVE"); // 人脸的类型 这里选择生活照
  //      String param = GsonUtils.toJson(map);
  //      return HttpUtil.post(url, accessToken, "application/json", param);
  //    } catch (Exception e) {
  //      e.printStackTrace();
  //    }
  //
  //    return "";
  //  }
  //
  //  /**
  //   * 通过读取字节码，获取图片中的人脸数据
  //   *
  //   * @param fileBates 图片的字节码
  //   * @return
  //   */
  //  public static String getFaceInfoByFileBytes(byte[] fileBates) throws IOException {
  //    // 1. 根据读取byte[] 数组,并将数组进行Base64编码
  //    String encode = Base64Util.encode(fileBates);
  //
  //    try {
  //      // 2.讲封装好的参数发送到目标地址,并返回人脸数据用于人脸检测
  //      String url = "https://aip.baidubce.com/rest/2.0/face/v3/detect";
  //      Map<String, Object> map = new HashMap<>();
  //      map.put("image", encode); // 图片的基本信息和方式
  //      map.put("image_type", "BASE64"); // 编码方式
  //      map.put("face_type", "LIVE"); // 人脸的类型 这里选择生活照
  //      String param = GsonUtils.toJson(map);
  //      return HttpUtil.post(url, accessToken, "application/json", param);
  //    } catch (Exception e) {
  //      e.printStackTrace();
  //    }
  //
  //    return "";
  //  }
  //
  //  /**
  //   * 根据 图片1和图片2的数据进行对比 判断是否为同一个人
  //   *
  //   * @param bytes
  //   * @param armFaceToken
  //   * @return
  //   */
  //  public static Boolean faceContrast(byte[] bytes, String armFaceToken, String userId) {
  //
  //    String path = "https://aip.baidubce.com/rest/2.0/face/v3/match";
  //
  //    String encode = Base64Util.encode(bytes);
  //    try {
  //      List<Map<String, Object>> maps = new ArrayList<>();
  //      Map<String, Object> imageOne = new HashMap<>();
  //      imageOne.put("image", encode);
  //      imageOne.put("image_type", "BASE64");
  //      imageOne.put("face_type", "LIVE");
  //
  //      Map<String, Object> imageTwo = new HashMap<>();
  //      imageTwo.put("image", armFaceToken);
  //      imageTwo.put("image_type", "FACE_TOKEN");
  //      imageTwo.put("face_type", "LIVE");
  //      maps.add(imageOne);
  //      maps.add(imageTwo);
  //      String param = GsonUtils.toJson(maps);
  //
  //      String result = HttpUtil.post(path, accessToken, "application/json", param);
  //      String sorce = getSorce(result);
  //      System.out.println(sorce);
  //      return Integer.parseInt(sorce) > 60;
  //
  //    } catch (Exception e) {
  //      e.printStackTrace();
  //    }
  //    return false;
  //  }
  //
  //  /**
  //   * 通过字节码讲人脸数据注册到人脸库
  //   *
  //   * @param bytes
  //   * @param userId
  //   * @return
  //   */
  //  public static String getFaceToken(byte[] bytes, String userId) {
  //
  //    String encode = Base64Util.encode(bytes);
  //
  //    // 请求url
  //    String url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add";
  //    try {
  //      Map<String, Object> map = new HashMap<>();
  //      map.put("image", encode);
  //      map.put("group_id", group_id);
  //      map.put("user_id", userId);
  //      map.put("user_info", userId + "的数据");
  //      map.put("liveness_control", "LOW");
  //      map.put("image_type", "BASE64");
  //      map.put("quality_control", "LOW");
  //
  //      String param = GsonUtils.toJson(map);
  //
  //      String result = HttpUtil.post(url, accessToken, "application/json", param);
  //      FacialIdentificationResult codeAndMsg = getCodeAndMsg(result);
  //      System.out.println(codeAndMsg.getErrorCode());
  //      System.out.println(codeAndMsg.getErrorMsg());
  //      if (!"0".equals(codeAndMsg.getErrorCode())) {
  //        throw new EmosException("-->" + codeAndMsg.getErrorMsg());
  //      }
  //      FaceInfo faceInfo = JSON.parseObject(result, FaceInfo.class);
  //      return faceInfo.getResult().getFace_token();
  //    } catch (Exception e) {
  //      e.printStackTrace();
  //    }
  //    return null;
  //  }
  //  /**
  //   * 通过读取文件位置读取文件后讲人脸数据注册到人脸库
  //   *
  //   * @param filePath
  //   * @param userId
  //   * @return
  //   */
  //  public static String getFaceToken(String filePath, String userId) throws IOException {
  //    byte[] bytes = FileUtil.readFileByBytes(filePath);
  //    String encode = Base64Util.encode(bytes);
  //
  //    // 请求url
  //    String url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add";
  //    try {
  //      Map<String, Object> map = new HashMap<>();
  //      map.put("image", encode);
  //      map.put("group_id", "emos");
  //      map.put("user_id", userId);
  //      map.put("user_info", userId + "的人脸数据");
  //      map.put("liveness_control", "NORMAL");
  //      map.put("image_type", "BASE64");
  //      map.put("quality_control", "LOW");
  //
  //      String param = GsonUtils.toJson(map);
  //
  //      String result = HttpUtil.post(url, accessToken, "application/json", param);
  //      FaceInfo faceInfo = JSON.parseObject(result, FaceInfo.class);
  //      String face_token = faceInfo.getResult().getFace_token();
  //      return face_token;
  //    } catch (Exception e) {
  //      e.printStackTrace();
  //    }
  //    return null;
  //  }
  //
  //  /**
  //   * 通过编译后的base64编码的图片进行保存到人脸库
  //   *
  //   * @param encode
  //   * @param userId
  //   * @return
  //   * @throws IOException
  //   */
  //  public static String getFaceTokenbyEncode(String encode, String userId) throws IOException {
  //
  //    // 请求url
  //    String url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add";
  //    try {
  //      Map<String, Object> map = new HashMap<>();
  //      map.put("image", encode);
  //      map.put("group_id", "emos");
  //      map.put("user_id", userId);
  //      map.put("user_info", userId + "的人脸数据");
  //      map.put("liveness_control", "NORMAL");
  //      map.put("image_type", "BASE64");
  //      map.put("quality_control", "LOW");
  //
  //      String param = GsonUtils.toJson(map);
  //
  //      String result = HttpUtil.post(url, accessToken, "application/json", param);
  //      FacialIdentificationResult codeAndMsg = getCodeAndMsg(result);
  //      if (!"0".equals(codeAndMsg.getErrorCode())) {
  //        throw new EmosException(codeAndMsg.getErrorMsg());
  //      }
  //      FaceInfo faceInfo = JSON.parseObject(result, FaceInfo.class);
  //      String face_token = faceInfo.getResult().getFace_token();
  //
  //      return face_token;
  //    } catch (Exception e) {
  //      e.printStackTrace();
  //    }
  //    return null;
  //  }
  //
  //  /**
  //   * 删除faceToken
  //   *
  //   * @param token
  //   * @param userId
  //   */
  //  public static boolean deleteFaceToken(String token, String userId) {
  //    String url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/delete";
  //    try {
  //      Map<String, Object> map = new HashMap<>();
  //      map.put("user_id", userId);
  //      map.put("group_id", group_id);
  //      map.put("face_token", token);
  //      map.put("log_id", 0);
  //
  //      String param = GsonUtils.toJson(map);
  //      String result = HttpUtil.post(url, accessToken, "application/json", param);
  //      log.info(result);
  //      return true;
  //    } catch (Exception e) {
  //      e.printStackTrace();
  //    }
  //    return false;
  //  }
  //
  //  /**
  //   * 获取Ren脸识别中的score
  //   *
  //   * @param key
  //   * @return
  //   */
  //  private static String getSorce(String key) {
  //    JsonParser jp = new JsonParser();
  //    // 将json字符串转化成json对象
  //    JsonObject jo = jp.parse(key).getAsJsonObject();
  //    String score = jo.get("result").getAsJsonObject().get("score").getAsString();
  //    return score;
  //  }
  //
  //  /**
  //   * 获取返回信息中的错误代码和信息
  //   *
  //   * @param key
  //   * @return
  //   */
  //  private static FacialIdentificationResult getCodeAndMsg(String key) {
  //    JsonParser jp = new JsonParser();
  //    // 将json字符串转化成json对象
  //    JsonObject jo = jp.parse(key).getAsJsonObject();
  //    String error_code = jo.get("error_code").getAsString();
  //    String error_msg = jo.get("error_msg").getAsString();
  //    FacialIdentificationResult result = new FacialIdentificationResult();
  //    result.setErrorCode(error_code);
  //    result.setErrorMsg(error_msg);
  //    return result;
  //  }
  //
  //  /**
  //   * 根据 图片1和图片2的数据进行对比 判断是否为同一个人
  //   *
  //   * @param bytes
  //   * @param armFaceToken
  //   * @return
  //   */
  //  public static Boolean faceContrast(String encode, String armFaceToken, String userId) {
  //
  //    String path = "https://aip.baidubce.com/rest/2.0/face/v3/match";
  //
  //    try {
  //      List<Map<String, Object>> maps = new ArrayList<>();
  //      Map<String, Object> imageOne = new HashMap<>();
  //      imageOne.put("image", encode);
  //      imageOne.put("image_type", "BASE64");
  //      imageOne.put("face_type", "LIVE");
  //
  //      Map<String, Object> imageTwo = new HashMap<>();
  //      imageTwo.put("image", armFaceToken);
  //      imageTwo.put("image_type", "FACE_TOKEN");
  //      imageTwo.put("face_type", "LIVE");
  //      maps.add(imageOne);
  //      maps.add(imageTwo);
  //      String param = GsonUtils.toJson(maps);
  //
  //      String result = HttpUtil.post(path, accessToken, "application/json", param);
  //      System.out.println("--->" + result);
  //      String sorce = getSorce(result);
  //
  //      return sorce.compareTo("80") >= 0 || Long.parseLong(sorce) >= 80;
  //
  //    } catch (Exception e) {
  //      e.printStackTrace();
  //    }
  //    return false;
  //  }
}
